package com.supermarket.manage.provider.api.product;

import com.supermarket.manage.common.dto.PageBean;
import com.supermarket.manage.common.dto.prod.request.ProdPageParams;
import com.supermarket.manage.common.dto.prod.response.ProductDto;
import com.supermarket.manage.common.pojo.Product;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author Faxon
 * @version 1.0
 * @date 2020-03-08 19:16
 **/
public interface ProductService {
    /**
     * 根据商品名称获取数量
     *
     * @param product
     * @return
     */
    Integer getCountByPname(Product product);

    /**
     * 添加商品
     *
     * @param product
     * @return
     */
    Boolean addProduct(Product product);

    /**
     * 下架商品
     *
     * @param pid
     * @return
     */
    Boolean deleteProdByPid(String pid);

    /**
     * 根据id获取商品信息
     *
     * @param pid
     * @return
     */
    Product getProdByPid(String pid);

    /**
     * 更新商品
     *
     * @param oldProd
     * @param product
     * @return
     */
    Boolean updateProd(Product oldProd, Product product);

    /**
     * 条件查询商品分页列表
     *
     * @param params
     * @return
     */
    PageBean<ProductDto> getProdPageList(ProdPageParams params);

    /**
     * 根据cid获取商品数量
     *
     * @param cid
     * @return
     */
    Integer getProdCountByCid(String cid);

    /**
     * 根据id获取商品信息
     *
     * @param pid
     * @return
     */
    ProductDto getProdDtoByPid(String pid);

    /**
     * 根据多个id 获取商品集合
     *
     * @param ids
     * @return
     */
    List<ProductDto> getProdDtoByPids(List<String> ids);

    /**
     * 批量增加商品库存
     *
     * @param products
     * @return
     */
    Integer addStockingNumber(List<Product> products);

    /**
     * 批量减少商品库存
     *
     * @param products
     * @return
     */
    Integer reduceStockingNumber(List<Product> products);

    /**
     * 批量修改商品库存
     *
     * @param products
     * @return
     */
    Integer updateStockingNumber(List<Product> products);

    /**
     * 获取库存预警商品
     *
     * @param buyerId
     * @return
     */
    List<ProductDto> getWarnProd(String buyerId);
}
